/**
 *author:yhb
 */
package com.towker.frame.dao.sys;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.stereotype.Repository;

import com.towker.core.db.*;
import com.towker.core.page.PageModel;
import com.towker.core.page.PageRequest;
import com.towker.frame.model.sys.User;

@Repository
public class UserDao extends BaseDao<User, Long>
{
	/**
	 * 获得实体的Class对象。
	 */
	@SuppressWarnings("unchecked")
	@Override
	public Class getEntityClass(){return User.class;}

	/**
	 * 批量删除用户。
	 */
	public void delByUserIds(List<Long> userIds)
	{
		getSqlSessionTemplate().delete(getIbatisMapperNamespace() + ".delByUserIds", userIds);
	}

	/**
	 * 用户密码重置。
	 * @param userid - 要修改密码的用户的编号。
	 * @param pwd - 新的密码信息。
	 */
	public void resetPwd(long userId, String password)
	{
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("id", userId);
		map.put("password", password);
		this.getSqlSessionTemplate().update(getIbatisMapperNamespace() + ".resetPwd", map);
	}
	
	/**
	 * 获得某个下属的所有上级。
	 */
	@SuppressWarnings("unchecked")
	public List<User> getAllLeadsBySuborid(long suborid)
	{
		List<User> list = getSqlSessionTemplate().selectList(getIbatisMapperNamespace() + ".getAllLeadsBySuborid", suborid);
		return list;
	}
	
	
	/**
	 * 获得当前用户的所有下属。
	 */
	@SuppressWarnings("unchecked")
	public List<User> getAllSuborsByCrtUserid(long crtUserid)
	{
		List<User> list = getSqlSessionTemplate().selectList(getIbatisMapperNamespace() + ".getAllSuborsByCrtUserid", crtUserid);
		return list;
	}
	
	/**
	 * 获得某个上级的所有下属。
	 */
	@SuppressWarnings("unchecked")
	public List<User> getAllSuborsByLeadid(long leadid)
	{
		List<User> list = getSqlSessionTemplate().selectList(getIbatisMapperNamespace() + ".getAllSuborsByLeadid", leadid);
		return list;
	}
	/**获得所有的用户*/
	@SuppressWarnings("unchecked")
	public List<User> getAllUser(){
		return getSqlSessionTemplate().selectList(getIbatisMapperNamespace() + ".getAllUser", null);
	}
	/**
	 * 获得部门已经分配的员工。
	 */
	@SuppressWarnings("unchecked")
	public List<User> getAssignedDeptUsers(long deptid)
	{
		return getSqlSessionTemplate().selectList(getIbatisMapperNamespace() + ".getAssignedDeptUsers", deptid);
	}
	/**
	 * 根据部门编号获得所有用户
	 * */
	@SuppressWarnings("unchecked")
	public List<User> getAssignedUserByDeptid(Long deptid)
	{
		return (List<User>)getSqlSessionTemplate().selectList(getIbatisMapperNamespace()+".getAssignedUserByDeptid", deptid);
	}
	/**根据角色ID获得已分配部门的用户*/
	@SuppressWarnings("unchecked")
	public List<User> getAssigendUserByRoleid(Long roleid){
		return (List<User>)getSqlSessionTemplate().selectList(getIbatisMapperNamespace()+".getAssigendUserByRoleid", roleid);
	}
	@SuppressWarnings("unchecked")
	public List<User> getAssignedUserByUserid(Long userid){
		return (List<User>)getSqlSessionTemplate().selectList(getIbatisMapperNamespace()+".getAssignedUserByUserid", userid); 
	}
	/**根据角色编号，获得分配的用户*/
	@SuppressWarnings("unchecked")
	public List<User> getAssignedUsers(long roleid)
	{
		return getSqlSessionTemplate().selectList(getIbatisMapperNamespace() + ".getAssignedUsers", roleid);
	}
	
	
	@SuppressWarnings("unchecked")
	public User getById(long id)
	{
		return (User)getSqlSessionTemplate().selectOne(getIbatisMapperNamespace() + ".getById", id);
	}
	/**
	 * 获得部门用户分页。
	 */
	@SuppressWarnings("unchecked")
	public PageModel getDeptUserPage(PageRequest pageRequest)
	{
		String statementName = "com.towker.frame.model.User.getDeptUser";
		String countStatmentName = "com.towker.frame.model.User.getDeptUserCount";
		return getPage(statementName, countStatmentName, pageRequest);
	}
	
	/**
	 * 获得当前用户的所有上级。
	 */
	@SuppressWarnings("unchecked")
	public List<User> getLeadsByUserid(long crtUserid)
	{
		List<User> list = getSqlSessionTemplate().selectList(getIbatisMapperNamespace() + ".getAllLeadsByCrtUserid", crtUserid);
		return list;
	}

	/**
	 * 获得角色用户分页。
	 */
	@SuppressWarnings("unchecked")
	public PageModel getRoleUserPage(PageRequest pageRequest)
	{
	 
		return getPage(getIbatisMapperNamespace() + ".getRoleUser",  pageRequest);
	}
	
	public PageModel getSubordinate(PageRequest pageRequest)
	{
		return getPage(getIbatisMapperNamespace() + ".getSubordinate",  pageRequest);
	}
	
	/**
	 * 获得部门待分配的员工。
	 */
	@SuppressWarnings("unchecked")
	public List<User> getUnassignedDeptUsers(long deptid)
	{
		return getSqlSessionTemplate().selectList(getIbatisMapperNamespace() + ".getUnassignedDeptUsers", deptid);
	}
	
	@SuppressWarnings("unchecked")
	public List<User> getUnassignedUserByDeptid(Long deptid)
	{
		return (List<User>)getSqlSessionTemplate().selectList(getIbatisMapperNamespace()+".getUnassignedUserByDeptid", deptid);
	}
	
	/**根据角色ID获得未分配部门的用户*/
	@SuppressWarnings("unchecked")
	public List<User> getUnassignedUserByRoleid(Long roleid)
	{
		return (List<User>)getSqlSessionTemplate().selectList(getIbatisMapperNamespace()+".getUnassignedUserByRoleid", roleid);
	}
	/**获得未下属分配用户*/
	@SuppressWarnings("unchecked")
	public List<User> getUnassignedUserByUserid(Long userid){
		return (List<User>)getSqlSessionTemplate().selectList(getIbatisMapperNamespace()+".getUnassignedUserByUserid", userid);
	}
	/**
	 * 根据角色编号，获得分配的用户。
	 */
	@SuppressWarnings("unchecked")
	public List<User> getUnassignedUsers(long roleid)
	{
		return getSqlSessionTemplate().selectList(getIbatisMapperNamespace() + ".getUnassignedUsers", roleid);
	}
	
	/**
	 * 根据用户输入的账号来获得用户对象，有则返回用户对象，无则返回null。
	 * @param account - 用户输入的账号字符串。
	 * @return User - 用户对象。
	 */
	public User getUserByAccount(String account)
	{
		return (User) this.getSqlSessionTemplate().selectOne(getIbatisMapperNamespace() + ".getUserByAccount", account);
	}
	
	/**
	 * 根据用户输入的账号与密码来获得用户对象。
	 * @param account - 用户输入的账号。
	 * @param password - 用户输入的密码。
	 * @return User - 用户对象。
	 */
	public User getUserByAccountAndPwd(String account, String pwd)
	{
		Map<String, String> map = new HashMap<String, String>();
		map.put("account", account);
		map.put("pwd", pwd);
		return (User) this.getSqlSessionTemplate().selectOne(getIbatisMapperNamespace() + ".getUserByAccountAndPwd", map);
	}
	
	/**
	 * 获得用户分页。
	 */
	@SuppressWarnings("unchecked")
	public PageModel getUserPage(PageRequest pageRequest)
	{
		return getPage(pageRequest);
	}

	/**
	 * 根据部门编号，获得该部门的所有员工所组成的json列表数据。
	 */
	@SuppressWarnings("unchecked")
	public List<User> getUsersByDeptid(long deptid)
	{
		return (List<User>) this.getSqlSessionTemplate().selectList(getIbatisMapperNamespace() + ".getUsersByDeptid", deptid);
	}

	/**
	 * 根据角色编号获得该角色的所有用户。
	 */
	@SuppressWarnings("unchecked")
	public List<User> getUsersByRoleid(long roleid)
	{
		return this.getSqlSessionTemplate().selectList(getIbatisMapperNamespace() + ".getUsersByRoleid", roleid);
	}
	
	public List<User> getCustomCodes()
	{
		return this.getSqlSessionTemplate().selectList(getIbatisMapperNamespace() + ".getCustomCodes",null);
	}
	
	/**
	 * 
	 * @param map
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public int updateUser(Map map)
	{
		return getSqlSessionTemplate().update(getIbatisMapperNamespace()+".updateUser",map);
	}
	
	@SuppressWarnings("unchecked")
	public void updSql(Map map)
	{
		this.getSqlSessionTemplate().update(getIbatisMapperNamespace() + ".updexcel", map);
	}

	public User getByCustomCode(String custom_code) {
		return (User)getSqlSessionTemplate().selectOne(getIbatisMapperNamespace() + ".getByCustomCode", custom_code);
	}
}
